package com.dbs.zstp.common.service;

import tk.mybatis.mapper.common.BaseMapper;

import java.util.List;

/**
 * 
 * 包名：com.dbs.common.service
 * 功能：TODO 通用Service
 * 作者：hualn
 * 日期：2018年1月18日 上午10:02:07
 * http://git.oschina.net/free/Mapper/blob/master/wiki/mapper3/5.Mappers.md
 */
public interface BaseService<T> {

	/**
	 * 保存一个实体，null的属性也会保存，不会使用数据库默认值
	 * @param record
	 * @return
	 * @throws Exception
	 */
    T insert(T record) throws Exception;
    /**
     * 保存一个实体，null的属性不会保存，会使用数据库默认值
     * @param record
     * @return
     * @throws Exception
     */
    T insertSelective(T record) throws Exception;
    /**
     * 保存多个实体
     * null的属性不会保存，会使用数据库默认值
     * @param t
     * @return
     * @throws Exception
     */
    List<T> insertList(List<T> t) throws Exception;

    /**
     * 根据主键字段进行删除，方法参数必须包含完整的主键属性
     * @param key
     * @return
     * @throws Exception
     */
    int deleteByPrimaryKey(Object key) throws Exception;
    
    /**
     * 根据实体属性作为条件进行删除，查询条件使用等号
     * @param record
     * @return
     * @throws Exception
     */
    int delete(T record) throws Exception;

    /**
     * 批量删除
     * @param ts
     * @return
     * @throws Exception
     */
    int delete(List<T> ts) throws Exception;
    
    /**
     * 全查
     * @return
     * @throws Exception
     */
    List<T> selectAll() throws Exception;

    /**
     * 根据主键更新属性不为null的值
     * @param record
     * @return
     * @throws Exception
     */
    int updateByPrimaryKeySelective(T record) throws Exception;

    /**
     * 根据主键更新实体全部字段，null值会被更新
     * @param record
     * @return
     * @throws Exception
     */
    int updateByPrimaryKey(T record) throws Exception;

    /**
     * 根据主键查询
     * @param key
     * @return
     * @throws Exception
     */
    T selectByPrimaryKey(Object key) throws Exception;
    
    /**
     * 根据条件查询
     * @param record
     * @return
     * @throws Exception
     */
    List<T> select(T record) throws Exception;

    /**
     * 根据条件查询，返回单条记录
     * @param record
     * @return
     * @throws Exception
     */
    T selectOne(T record) throws Exception;

    /**
     * 返回mapper
     * @return
     */
    BaseMapper<T> getMapper();
    
    Object getExample(T t);
}
